home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Thread Manager / Thread Manager 2.1.1d1+ / ThreadedSort / Sprocket / Lib / Preferences.cp < prev    next >
Encoding:
Text File  |  1995-04-28  |  2.2 KB  |  81 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        Preferences.cp
  3.  
  4.     Contains:    minimalist preference file routines
  5.                 
  6.     Written by: Dave Falkenburg
  7.  
  8.     Copyright:    © 1993-94 by Dave Falkenburg, all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.      
  12.          <4>    11/16/94    DRF        Kill a kinda bogus warning by replacing “sizeof(<variable>)”
  13.                                     with “sizeof(<type>)”.
  14.          <3>     9/27/94    DRF         AppLib.h is now Sprocket.h
  15.          <2>      9/9/94    DRF        Reordered headers and removed redundant #includes.
  16.  */
  17.  
  18. #include "Sprocket.h"
  19.  
  20. #include <Resources.h>
  21. #include <TextUtils.h>
  22. #include <Folders.h>
  23.  
  24. short
  25. OpenPreferencesResFile(void)
  26.     {
  27.     OSErr            err;
  28.     short            prefsVRefNum;
  29.     long            prefsDirID;
  30.     HParamBlockRec    pb;
  31.     short            prefsRefNum;
  32.     Str255            prefsFileName;
  33.     
  34.     err = FindFolder(kOnSystemDisk,kPreferencesFolderType,kCreateFolder,&prefsVRefNum,&prefsDirID);
  35.  
  36.     if (err != noErr)    //    Couldn’t find preferences folder, something is wrong
  37.         return(-1);
  38.  
  39.     GetIndString(prefsFileName,kPreferencesFileStrings,kPreferencesFileName);
  40.  
  41.     //    Try openning the Preferences file
  42.             
  43.     prefsRefNum = HOpenResFile(prefsVRefNum,prefsDirID,prefsFileName,fsRdWrPerm); 
  44.     if (prefsRefNum == -1)
  45.         {
  46.         //    Get the application’s creator
  47.         
  48.         ProcessInfoRec        processInfo;
  49.         ProcessSerialNumber    currentProc = {0,kCurrentProcess};
  50.         
  51.         processInfo.processInfoLength = sizeof(ProcessInfoRec);
  52.         processInfo.processName = nil;
  53.         processInfo.processAppSpec = nil;
  54.         
  55.         (void) GetProcessInformation(¤tProc,&processInfo);
  56.         
  57.         //    Couldn’t open prefs file, try making a new one
  58.         
  59.         HCreateResFile(prefsVRefNum,prefsDirID,prefsFileName);
  60.         pb.fileParam.ioNamePtr = prefsFileName;
  61.         pb.fileParam.ioVRefNum = prefsVRefNum;
  62.         pb.fileParam.ioDirID = prefsDirID;
  63.         pb.fileParam.ioFDirIndex = 0;
  64.         err = PBHGetFInfo(&pb,false);
  65.         
  66.         pb.fileParam.ioNamePtr = prefsFileName;
  67.         pb.fileParam.ioVRefNum = prefsVRefNum;
  68.         pb.fileParam.ioDirID = prefsDirID;
  69.         pb.fileParam.ioFDirIndex = 0;
  70.         pb.fileParam.ioFlFndrInfo.fdType = 'PREF';
  71.         pb.fileParam.ioFlFndrInfo.fdCreator = processInfo.processSignature;
  72.         pb.fileParam.ioFlFndrInfo.fdFlags = 0;
  73.         err = PBHSetFInfo(&pb,false); 
  74.     
  75.         if (ResError() == noErr)    //    Try opening the newly created prefs file if we made it
  76.             prefsRefNum = HOpenResFile(prefsVRefNum,prefsDirID,prefsFileName,fsRdWrPerm);            
  77.         }
  78.         
  79.     return(prefsRefNum);
  80.     }
  81.